package com.hanbang.chu_xing_gao_zhao.myview;

import java.util.ArrayList;

import android.app.Activity;
import android.content.Context;
import android.graphics.drawable.ColorDrawable;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.LinearLayout;
import android.widget.PopupWindow;
import android.widget.ScrollView;
import android.widget.TextView;

import com.hanbang.chu_xing_gao_zhao.entity.PopupData;
import com.hanbang.chu_xing_gao_zhao.utils.UiUtils;
import com.hanbang.cxgz_2.R;

/**
 * popupWindow 菜单的封装
 *
 * @author yang
 *
 */
public class MorePopupWindowPublic extends PopupWindow implements OnClickListener {
	private View conentView;

	/** 存放里的item */
	public ArrayList<TextView> parentView;

	/** 对话框点击事件 */
	private OnClickCallback onClickCallback = null;

	/** 存放条目的父容器（server item parent vessel） */
	private LinearLayout parent;

	/** 控制滑动的显示范围（contrle slide scope） */
	private ScrollView sv;

	/** 最多显示的item 的数量 */
	private int itemNum;

	public View view;




	/**返回的id*/


	/**
	 *
	 * @param context
	 *            传入一个调入者对象（上下文菜单）
	 * @param viewId
	 *            一个布局ID
	 * @param content
	 *            这个数组是item 的显示内容
	 * @param itemNum
	 *            最多显示的数量
	 */
	public MorePopupWindowPublic(final Context context, int viewId, ArrayList<PopupData> content, int itemNum) {

		LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
		/** 得到视图 */
		conentView = inflater.inflate(viewId, null);

		UiUtils.applyFont(conentView);

		parent = (LinearLayout) conentView.findViewById(R.id.parent);
		sv = (ScrollView) conentView.findViewById(R.id.scrollView);
		this.itemNum = itemNum;

		addItem(context, content);

		/**
		 * popup 的一些设置
		 */
		// 设置SelectPicPopupWindow的View
		this.setContentView(conentView);

		// 设置SelectPicPopupWindow弹出窗体的高
		this.setHeight(LayoutParams.WRAP_CONTENT);

		// 设置SelectPicPopupWindow弹出窗体可点击
		this.setFocusable(true);
		this.setOutsideTouchable(true);

		// 刷新状态
		this.update();

		// 实例化一个ColorDrawable背景颜色
		ColorDrawable dw = new ColorDrawable(0xffffffff);
		// 点back键和其他地方使其消失,设置了这个才能触发OnDismisslistener ，设置其他控件变化等操作
		this.setBackgroundDrawable(dw);
		// mPopupWindow.setAnimationStyle(android.R.style.Animation_Dialog);
		// 设置SelectPicPopupWindow弹出窗体动画效果
		this.setAnimationStyle(R.style.AnimationPreview);

	}

	/**
	 * popup 的初始化与数据的加载，和添加监听
	 *
	 * @param context
	 *            上下文
	 * @param content
	 *            显示的内容
	 *
	 *
	 */

	private void addItem(Context context, ArrayList<PopupData> content) {
		parentView = new ArrayList<TextView>();

		for (int i = 0; i < content.size(); i++) {

			TextView view = new TextView(context);
			view.setGravity(Gravity.CENTER);
			view.setText(content.get(i).getTitle());
			view.setTextColor(0xff000000);
			view.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, 100, 0));
			view.setId(i);

			view.setTextSize(14);
			// ((ViewGroup) conentView).addView(view);//也可以用根布局直接添加
			parent.addView(view);
			parentView.add(view);

			// 单个item 的高度
			int itemHeight = view.getLayoutParams().height;
			/**
			 * time 显示的最大高度
			 */
			if (i == itemNum) {
				LinearLayout.LayoutParams linearParams = (LinearLayout.LayoutParams) sv.getLayoutParams(); // 取控件sv当前的布局参数
				linearParams.height = itemHeight*itemNum;// 当控件的高强制设成50象素
				sv.setLayoutParams(linearParams); // 使设置好的布局参数应用到控件sv
			}

		}

		// 遍历添加监听
		for (int i = 0; i < parentView.size(); i++) {
			parentView.get(i).setOnClickListener(this);
		}

	}

	/**
	 * 对话框的显示位置
	 *
	 * @param parent
	 *            父控件
	 * @param width
	 *            设置宽度
	 */
	public void showPopupWindow(View parent, int width) {
		this.view=parent;

		if (!this.isShowing()) {
			// 设置控件宽度，是对对象控件 的2倍
			this.setWidth(parent.getWidth() * width);
			// 显示位置在对象控件的下面，宽度的1/2的前面
			this.showAsDropDown(parent, -parent.getWidth() / 2, 5);



		} else {

			this.dismiss();
		}

	}

	/**
	 *
	 *
	 * 对话框的显示位置
	 *
	 * @param parent
	 *            父控件
	 * @param width
	 *            设置宽度
	 */
	public void showPopupWindow(View parent, Double width) {


		if (!this.isShowing()) {
			// 设置控件宽度，是对对象控件 的2倍
			this.setWidth((int)(parent.getWidth() * width/2));
			// 显示位置在对象控件的下面，宽度的1/2的前面
			this.showAsDropDown(parent, 0 , 5);



		} else {

			this.dismiss();
		}

	}

	/**
	 * 监听的处理
	 */
	@Override
	public void onClick(View v) {

		if (onClickCallback != null) {
			/**
			 * 实现接口并赋值
			 */
			onClickCallback.onClick(MorePopupWindowPublic.this, v.getId(), parentView.get(v.getId()).getText()
					.toString());
			dismiss();

		} else {
			dismiss();
		}

	}

	/**
	 * 接口
	 */
	public interface OnClickCallback {

		public void onClick(MorePopupWindowPublic morePopWindow, Object number, String content);

	}

	/**
	 * 当设置监听时必须实现接口,通过接口参数把一些信息传递给调用者
	 *
	 * @param callback
	 */
	public void setOnClickCallback(OnClickCallback callback) {
		onClickCallback = callback;
	}

}
